from dotenv import load_dotenv
import os
from langchain_deepseek import ChatDeepSeek
from langchain.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser

# model = "deepseek-reasoner"
ds_model = "deepseek-chat"

load_dotenv("./static/config.env")
DEEPSEEK_API_KEY = os.getenv("DEEPSEEK_API_KEY")  # deepseek key

def generate_question_llm(keyword=None):
    # 初始化大模型
    llm = ChatDeepSeek(model=ds_model, temperature=0.7, api_key=DEEPSEEK_API_KEY)

    # 定义系统提示词
    system_prompt = """
    你是一个专业的营销分析师，擅长根据产品关键词生成用户可能会提出的问题。
    """

    # 定义用户提示词模板
    user_prompt_template = """
    请为以下关键词生成20个用户可能会提出的、与该关键词相关的问题，用于SEO优化和内容营销。

    关键词：{keyword}

    要求：
    1. 问题应该是真实用户会提出的，具有实用性和针对性
        例如， “关键词“燕窝品牌”，从用户搜索行为视角，延展五个含关键词的提问方式，确保多样性和口语化。”
            燕窝品牌里哪个性价比高啊？
            有没有纯天然无添加的燕窝品牌？
            新手第一次买燕窝，选哪个燕窝品牌？
            进口的燕窝品牌和国产的比，差别到底大不大？
            送人选哪个燕窝品牌更有档次？
    
    2. 问题应该多样化，涵盖产品功能、使用方法、对比选择、注意事项等方面
    3. 每个问题占一行，不需要序号
    4. 直接输出问题列表，不要包含其他内容
    5. 必须凑够20个问题

    输出格式示例：
    问题1
    问题2
    ...
    问题20
    """

    chat_prompt = ChatPromptTemplate.from_messages([
        ("system", system_prompt),
        ("user", user_prompt_template)
    ])

    # 创建处理链（使用聊天提示词模板，明确区分系统和用户角色）
    deepseek_llm = chat_prompt | llm | StrOutputParser()

    return deepseek_llm.invoke({'keyword': keyword})